from celery.app import task
from django.shortcuts import render
#from celery.task import periodic_task

# Create your views here.
import json
from datetime import datetime, timedelta

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django_celery_beat.models import ClockedSchedule, PeriodicTask
from celery.schedules import crontab


def celery_test(request):
    # 任务名
    task_name = 'celery_test'
    # 任务执行的时间，设置为下一分钟的10秒，celery执行时间的时区是UTC，要保证数据库中的时间是UTC时间，这里获取的是亚洲上海的时间，所以减了8小时
    time = (datetime.now() - timedelta(hours=8) + timedelta(minutes=1)).strftime("%Y-%m-%d %H:%M:10")
    # 创建任务的执行时间
    clock = ClockedSchedule.objects.get_or_create(clocked_time=time)
    # 创建指定时间执行的celery任务
    PeriodicTask.objects.update_or_create(
        name=task_name,  # 任务名，尽量保证唯一性，若该任务已存在，则更新该任务
        task='celeryapp.tasks.task_one',  # 要执行的异步函数的全路径
        defaults={
            'clocked': clock[0],  # 使用clocked在指定时间执行该任务
            'one_off': True,  # 在任务执行完一次后关闭该任务
            'enabled': True,  # 开启任务
            'args': json.dumps([]),  # 参数列表，必须是json格式的数组
        }
    )
    return JsonResponse({'message': '200'})